package com.teamsea.bean.post.process;

import java.lang.reflect.Proxy;
import java.time.LocalDateTime;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class MyBeanPostProcess implements BeanPostProcessor {

    /**
     * 使用代理开发模式
     * 1. 创建代理对象
     * 
     */

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {

        // 使用jdk代理方式进行
        Object beanProxy = Proxy.newProxyInstance(
                bean.getClass().getClassLoader(),
                bean.getClass().getInterfaces(),
                (proxy, method, args) -> {
                    // 输出开始时间
                    System.out.println("方法:"+method.getName()+"正在执行,开始时间:\t" + LocalDateTime.now());
                    Object object = method.invoke(bean, args);
                    System.out.println("方法:"+method.getName()+"正在执行,结束时间:\t" + LocalDateTime.now());
                    return object;
                });
        return beanProxy;
    }

}
